package com.wmwj.hxlj.service;

import com.wmwj.hxlj.entity.CollectionFolder;
import com.wmwj.hxlj.entity.User;
import com.wmwj.hxlj.entity.vo.*;
import com.wmwj.hxlj.utils.Result;

import java.util.List;

public interface UserService {
    /**
     * 根据ID查询用户
     * @param id
     * @return
     */
    User findById(Long id);

    /**
     * 用户注册
     * @param user
     * @return
     */
    Result<UserVo> register(User user);

    /**
     * 用户登录
     * @param user
     * @return
     */
    Result login(User user);

    /**
     * 修改用户密码
     * @param id 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 修改结果
     */
    Result<String> updatePassword(Long id, String oldPassword, String newPassword);

    /**
     * 注销用户账户（软删除）
     * @param id 用户ID
     * @param password 用户密码（验证身份）
     * @return 注销结果
     */
    Result<String> deactivateAccount(Long id, String password);

    /**
     * 通过用户名搜索用户
     * @param account 用户名
     * @return 搜索结果
     */
    Result<List<UserVo>> searchUsersByAccount(String account);

    /**
     * @return
     */
    Result<PageResult<AdminUserVo>> getAllUsers(Integer pageStart);

    /**
     * 批量删除用户
     * @param ids
     * @return
     */
    Result<String> batchDeleteUsers(List<Long> ids);

    /**
     * 修改用户信息
     * @param user
     * @return
     */
    Result updateUserInfo(User user);

    /**
     * 增加用户粉丝数量
     * @param followee_id
     * @param follower_id
     * @return 影响值
     */
    Result<Integer> incrementFollowerCount(Long followee_id, Long follower_id);

    /**
     * 判断用户是否已关注
     * @param followeeId
     * @param followerId
     * @return true 已关注，false 未关注
     */
    Result<Boolean> isFollowed(Long followeeId, Long followerId);

    /**
     * 创建收藏夹
     * @param collectionFolder
     * @return 返回结果
     */
    Result<String> createCollectionFolder(CollectionFolder collectionFolder);

    /**
     * 获取收藏夹
     * @param userId
     * @return 返回收藏夹列表
     */
    Result<List<CollectionFolderVo>> getCollectionFolder(Long userId);

    /**
     * 批量删除收藏夹
     * @param userId
     * @param ids
     * @return
     */
    Result<String> batchDeleteCollectionFolder(Long userId,List<Long> ids);

    /**
     * 更新收藏夹
     * @param collectionFolder
     * @return
     */
    Result<CollectionFolder> updateCollectionFolder(CollectionFolder collectionFolder);

    /**
     * 删除用户
     * @param id
     * @return
     */
    Result<String> deleteUser(Long id);

    /**
     * 管理员搜索用户
     * @param account
     * @param pageStart
     * @return
     */
    Result<PageResult<AdminUserVo>> adminSearchUsersByAccount(String account, Integer pageStart);

}
